SwingにUiをビルドして、私の要件はJTable内にJPanesを持つことです。これらのJPanesには、JButtonが組み込まれています。
私の使用例は以下の通りです:
提供されたファイル内にメソッドを格納するUIを提供するMethodEditorを記述しています。 UIでは、ボタンをクリックしたときにメソッドに渡されるパラメータを編集することもできます。
次のように一つ一つの方法は、UI表現を持っているでしょう - Java Swing - JTableをJTableに埋め込んだJpanel
を次のようにメソッドのクラスの私の基本的な表現である -
public Class Method {
String methodName;
List<String> InputVariableNames;
String OutputVariableName;
}
今私はMethod
オブジェクトのリストを持って、上List<Method> methodList
を私は私のJTableをベースにしたい。
public class MethodModel {
List<Method> methodModel;
}
私は質問earlierを求めていたとあって答えに私のコードをベースとしている - 次のように このList
はMethodModel
クラスに含まれています。
しかし、私のコードは動作していないようです。次のように私のコードがある -
public class MethodEditor extends JTable {
private static final long serialVersionUID = 1L;
private MethodEditorModel model ;
private MethodCellRenderer cellRenderer;
public MethodEditor(MethodModel bean) {
setRowHeight(25);
this.setPreferredSize(new Dimension(500, 500));
model = new MethodEditorModel(bean);
this.setModel(model);
setupComponent();
}
private void setupComponent() {
cellRenderer = new MethodCellRenderer();
this.setDefaultRenderer(Object.class,cellRenderer);
this.setBorder(BorderFactory.createLineBorder(Color.GRAY));
}
private static class MethodEditorModel extends DefaultTableModel implements PropertyChangeListener {
/**
*
*/
private static final long serialVersionUID = 1L;
private MethodModel bean;
public MethodEditorModel(MethodModel bean) {
this.bean = bean;
bean.addPropertyChangeListener(this);
}
@Override
public void propertyChange(PropertyChangeEvent evt) {
fireTableDataChanged();
}
}
private static class MethodCellRenderer implements TableCellRenderer {
/**
*
*/
private static final long serialVersionUID = 1L;
private MethodEditorCellPanel renderer = new MethodEditorCellPanel();
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
MethodModel methodModel = (MethodModel)value;
for(Method method : methodModel.getMethodList()) {
renderer.setComponents((Method) method);
}
return renderer;
}
}
private static class MethodEditorCellPanel extends JPanel implements ActionListener {
private static final long serialVersionUID = 1L;
private JButton upButton;
private JButton downButton;
private JButton methodDetailsButton;
private Method method;
public MethodEditorCellPanel() {
upButton = new JButton("Up");
downButton = new JButton("Down");
}
public void setComponents(Method method)
{
this.method = method;
methodDetailsButton = new JButton(method.getMethodName());
upButton.addActionListener(this);
downButton.addActionListener(this);
methodDetailsButton.addActionListener(this);
Box verticalBar = Box.createHorizontalBox();
verticalBar.add(upButton);
verticalBar.add(Box.createHorizontalStrut(15));
verticalBar.add(methodDetailsButton);
verticalBar.add(Box.createHorizontalStrut(15));
verticalBar.add(downButton);
add(verticalBar);
}
@Override
public void actionPerformed(ActionEvent evt) {
if(evt.getSource().equals(downButton)) {
}
if(evt.getSource().equals(upButton)) {
}
if(evt.getSource().equals(methodDetailsButton)) {
}
}
}
}
コードはコンパイルが、JTableは表示されません。 私が間違っているかもしれないことについての指針は大きな助けになるでしょう。
どのようにコードが機能していないのですか?それはコンパイルされませんか、または期待通りに動作しませんか?もしそうなら、何が間違っているのですか? –
* "私が間違っているかもしれないことを指摘するのは大いに役立つでしょう" * 1)Q&Aサイトへの投稿と質問を忘れる。 –
私はあいまいであることをお詫び申し上げます。コードはコンパイルされますが、JTableは表示されません。 – ping