0

我有一个按钮数组,可以在图像查询后显示图像。现在我正在尝试在每个按钮下添加一个复选框,以便用户可以检查这是否是相关图像。我将有一个 Jpanel 数组,其中每个 Jpanel 由一个按钮和复选框组成,但我不知道如何将所有组件合并到我的代码中。这是我到目前为止所拥有的:

resultPanel = new JPanel[10];
resultPanel[10].add(relevantFB);
resultPanel[10].add(button);

for (int i = 1; i < 101; i++) {
 button[i] = new JButton(newIcon);
 relevantFB[i] = new JCheckBox();
 relevantFB[i].setText("Relevant Image" + i);
 panelBottom1.add(button[i]);
 button[i].addActionListener(new IconButtonHandler(i, newIcon));
 relevantFB[i].addActionListener(new IconCheckboxHandler(i, newIcon));
 buttonOrder[i] = i;
 checkboxOrder[i]=i;
}
4

2 回答 2

1

为此,您不能为每一对(复选框+按钮)创建 JPanel。您必须创建一个面板,并在布局管理器的帮助下放置组件。为LayoutManager工作。

您可以为此目的使用GridBagLayout 。在下一个示例中,我在按钮下创建 5 个按钮和 5 个复选框:

public class Example extends JFrame {

public Example() {
    setLayout(new GridBagLayout());
    GridBagConstraints c = new GridBagConstraints();
    c.insets = new Insets(5, 5, 5, 5);
    JButton btns[] = new JButton[5];
    JCheckBox chboxes[] = new JCheckBox[5];

    c.gridx = 0;
    for(int i = 0;i<btns.length;i++){
        btns[i] = new JButton(""+i);
        getContentPane().add(btns[i],c);
        c.gridx++;
    }

    c.gridy = 1;
    c.gridx = 0;
    for(int i = 0;i<chboxes.length;i++){
        chboxes[i] = new JCheckBox(""+i);
        getContentPane().add(chboxes[i],c);
        c.gridx++;
    }

    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    pack();
    setVisible(true);
}

public static void main(String...strings ){
    Example e = new Example();
}

}
于 2013-11-02T20:40:10.123 回答
0

Use a JPanel with a GridBagLayout. Put buttons on the first row an checkboxes beneath.

--Edit--

Here is some code. This is assuming you have n icons in an array icon. Unlike you I've assumed the icons are numbered staring at 0.

    JPanel resultPanel = new JPanel() ;
    GridBagLayout gbl = new GridBagLayout() ;
    resultPanel.setLayout( gbl );
    GridBagConstraints constraints = new GridBagConstraints() ;

    JButton[] button = new JButton[n] ; ;
    for( int i = 0 ; i < n ; ++i ) {
        button[i] = new JButton( new ImageIcon( "path"+(i+1)+".jpg" ) ); }
        button[i].addActionListener(new IconButtonHandler(i+1, icon[i]));
        constraints.gridx = i ;
        constraints.gridy = 0 ;
        resultPanel.Add( button[i], constraints ) ; }

    JCheckBox[] relevantFB = new JCheckBox[n] ; ;
    for( int i = 0 ; i < n ; ++i ) {
        relevantFB[i] = new JCheckBox();
        relevantFB[i].setText("Relevant Image" + (i+1));
        relevantFB[i].addActionListener(new IconCheckboxHandler(i+1, icon[i]));
        constraints.gridx = i ;
        constraints.gridy = 1 ;
        resultPanel.add( relevantFB[i], constraints ) ; }
于 2013-11-02T20:03:23.367 回答