Anonymous
Могу ли я разместить одну и ту же кнопку на двух разных вкладках в JTabbedPane [дубликат]
Сообщение
Anonymous » 12 окт 2024, 04:24
У меня есть JTabbedPane в приложении Swing, где две вкладки имеют общую функциональность. Вкладка 1 предназначена для одного, а вкладка 2 — для второго. Обе вещи имеют уникальные действия, а также пару кнопок, которые действуют одинаково в каждой.
Очевидно, что я могу дублировать кнопки, которые добавляю к вещи 1, чтобы поместить в вещь 2 и заставить их выполняться. те же действия, но я хотел бы повторно использовать кнопки, чтобы не синхронизировать их. (На самом деле в моем реальном приложении их гораздо больше, чем 2).
Вот код, который я сократил до разумного размера. Он компилируется и запускается самостоятельно. Обратите внимание, что на вкладке Thing2 есть все нужные мне компоненты, а на вкладке Thing1 есть только уникальные компоненты Thing1.
Непосредственно перед публикацией я задавался вопросом, не является ли проблема именно GroupLayout. Я попробую использовать BoxLayout, чтобы проверить, сохраняется ли проблема.
Код: Выделить всё
public class LowLevelMinimal extends JPanel {
// Variables declaration
public JButton jButton_Thing2;
public JButton jButton_Thing1;
public JButton jButton_Both2;
public JButton jButton_Both1;
private JLabel jLabel_Both2;
private JLabel jLabel_Both1;
private JLabel jLabel_Thing1;
public JTextField jTextField_Thing2;
public JTextField jTextField_Thing1;
public JTextField jTextField_Both2;
public JTextField jTextField_Both1;
private JPanel panel_Thing1;
private JPanel panel_Thing2;
private JTabbedPane jTabbedPaneChipType;
public LowLevelMinimal()
{
super();
initComponents();
}
private void initComponents()
{
jLabel_Thing1 = new JLabel("Label 1");
jTextField_Thing1 = new JTextField("ONE");
jButton_Thing1 = new JButton("Thing1 Go");
jTextField_Thing2 = new JTextField("TWO");
jButton_Thing2 = new JButton("Thing2 Go");
jLabel_Both1 = new JLabel("Turn On");
jLabel_Both2 = new JLabel("Turn Off");
jTextField_Both1 = new JTextField();
jTextField_Both2 = new JTextField();
jButton_Both1 = new JButton("First Both");
jButton_Both2 = new JButton("Second Both");
jTextField_Both1.setText("1");
jTextField_Both2.setText("2");
panel_Thing1 = new JPanel();
panel_Thing2 = new JPanel();
jTabbedPaneChipType = new JTabbedPane();
jTabbedPaneChipType.addTab("Thing1", panel_Thing1);
jTabbedPaneChipType.addTab("Thing2", panel_Thing2);
GroupLayout layoutThing1 = new GroupLayout(panel_Thing1);
panel_Thing1.setLayout(layoutThing1);
layoutThing1.setHorizontalGroup(layoutThing1.createParallelGroup(GroupLayout.Alignment.LEADING)
.addGroup(layoutThing1.createSequentialGroup()
.addContainerGap()
.addGroup(layoutThing1.createParallelGroup(GroupLayout.Alignment.LEADING)
.addGroup(layoutThing1.createSequentialGroup()
.addGroup(layoutThing1.createParallelGroup(GroupLayout.Alignment.TRAILING, false)
.addComponent(jLabel_Thing1, GroupLayout.Alignment.LEADING))
.addGroup(layoutThing1.createParallelGroup(GroupLayout.Alignment.LEADING)
.addGroup(layoutThing1.createSequentialGroup()
.addGap(12, 12, 12)
.addGroup(layoutThing1.createParallelGroup(GroupLayout.Alignment.LEADING)
.addComponent(jTextField_Thing1, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
.addGap(7, 7, 7)
.addGroup(layoutThing1.createParallelGroup(GroupLayout.Alignment.LEADING)
.addComponent(jButton_Thing1, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))
.addGroup(layoutThing1.createSequentialGroup()
.addComponent(jLabel_Both1, GroupLayout.PREFERRED_SIZE, 66, GroupLayout.PREFERRED_SIZE)
.addGap(18, 18, 18)
.addComponent(jTextField_Both1, GroupLayout.PREFERRED_SIZE, 68, GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jButton_Both1, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
.addGroup(layoutThing1.createSequentialGroup()
.addComponent(jLabel_Both2, GroupLayout.PREFERRED_SIZE, 66, GroupLayout.PREFERRED_SIZE)
.addGap(18, 18, 18)
.addComponent(jTextField_Both2, GroupLayout.PREFERRED_SIZE, 68, GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jButton_Both2, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
).addContainerGap()
))));
layoutThing1.setVerticalGroup(layoutThing1.createParallelGroup(GroupLayout.Alignment.LEADING)
.addGroup(layoutThing1.createSequentialGroup()
.addContainerGap()
.addGroup(layoutThing1.createParallelGroup(GroupLayout.Alignment.LEADING)
.addComponent(jLabel_Both1, GroupLayout.Alignment.TRAILING)
.addComponent(jTextField_Both1, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
.addComponent(jButton_Both1))
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layoutThing1.createParallelGroup(GroupLayout.Alignment.BASELINE)
.addComponent(jLabel_Both2)
.addComponent(jTextField_Both2, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
.addComponent(jButton_Both2))
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layoutThing1.createParallelGroup(GroupLayout.Alignment.BASELINE)
.addComponent(jLabel_Thing1)
.addComponent(jTextField_Thing1, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
.addComponent(jButton_Thing1))
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addContainerGap()
));
GroupLayout layoutThing2 = new GroupLayout(panel_Thing2);
panel_Thing2.setLayout(layoutThing2);
layoutThing2.setHorizontalGroup(layoutThing2.createParallelGroup(GroupLayout.Alignment.LEADING)
.addGroup(
layoutThing2.createSequentialGroup()
.addContainerGap()
.addGroup(
layoutThing2.createParallelGroup(GroupLayout.Alignment.LEADING)
.addGroup(
layoutThing2.createParallelGroup(GroupLayout.Alignment.TRAILING, false)
.addGroup(
layoutThing2.createParallelGroup(GroupLayout.Alignment.LEADING)
.addGroup(
layoutThing2.createSequentialGroup()
.addGap(12, 12, 12)
.addGroup(layoutThing2.createParallelGroup(GroupLayout.Alignment.LEADING)
.addComponent(jTextField_Thing2, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
.addGap(7, 7, 7)
.addGroup(layoutThing2.createParallelGroup(GroupLayout.Alignment.LEADING)
.addComponent(jButton_Thing2, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
)
.addGroup(
layoutThing2.createSequentialGroup()
.addComponent(jLabel_Both1, GroupLayout.PREFERRED_SIZE, 66, GroupLayout.PREFERRED_SIZE)
.addGap(18, 18, 18)
.addComponent(jTextField_Both1, GroupLayout.PREFERRED_SIZE, 68, GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jButton_Both1, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
)
.addGroup(layoutThing2.createSequentialGroup()
.addComponent(jLabel_Both2, GroupLayout.PREFERRED_SIZE, 66, GroupLayout.PREFERRED_SIZE)
.addGap(18, 18, 18)
.addComponent(jTextField_Both2, GroupLayout.PREFERRED_SIZE, 68, GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jButton_Both2, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
)))
).addContainerGap()
));
layoutThing2.setVerticalGroup(layoutThing2.createParallelGroup(GroupLayout.Alignment.LEADING)
.addGroup(layoutThing2.createSequentialGroup()
.addContainerGap()
.addGroup(layoutThing2.createParallelGroup(GroupLayout.Alignment.LEADING)
.addComponent(jLabel_Both1, GroupLayout.Alignment.TRAILING)
.addComponent(jTextField_Both1, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
.addComponent(jButton_Both1))
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layoutThing2.createParallelGroup(GroupLayout.Alignment.BASELINE)
.addComponent(jLabel_Both2)
.addComponent(jTextField_Both2, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
.addComponent(jButton_Both2))
.addGroup(layoutThing2.createParallelGroup(GroupLayout.Alignment.BASELINE)
.addComponent(jTextField_Thing2, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
.addComponent(jButton_Thing2))
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addContainerGap()
));
this.add(jTabbedPaneChipType);
}
public static void main(String[] args)
{
JFrame frame = new JFrame("Test");
LowLevelMinimal llm = new LowLevelMinimal();
frame.getContentPane().add(llm);
frame.pack();
frame.setVisible(true);
}
Подробнее здесь:
https://stackoverflow.com/questions/790 ... tabbedpane
1728696251
Anonymous
У меня есть JTabbedPane в приложении Swing, где две вкладки имеют общую функциональность. Вкладка 1 предназначена для одного, а вкладка 2 — для второго. Обе вещи имеют уникальные действия, а также пару кнопок, которые действуют одинаково в каждой. Очевидно, что я могу дублировать кнопки, которые добавляю к вещи 1, чтобы поместить в вещь 2 и заставить их выполняться. те же действия, но я хотел бы повторно использовать кнопки, чтобы не синхронизировать их. (На самом деле в моем реальном приложении их гораздо больше, чем 2). Вот код, который я сократил до разумного размера. Он компилируется и запускается самостоятельно. Обратите внимание, что на вкладке Thing2 есть все нужные мне компоненты, а на вкладке Thing1 есть только уникальные компоненты Thing1. Непосредственно перед публикацией я задавался вопросом, не является ли проблема именно GroupLayout. Я попробую использовать BoxLayout, чтобы проверить, сохраняется ли проблема. [img]https://i.sstatic.net/e81Q5kRv.png[/img] [img]https://i.sstatic.net/xV8Khu7i.png[/img] [code]public class LowLevelMinimal extends JPanel { // Variables declaration public JButton jButton_Thing2; public JButton jButton_Thing1; public JButton jButton_Both2; public JButton jButton_Both1; private JLabel jLabel_Both2; private JLabel jLabel_Both1; private JLabel jLabel_Thing1; public JTextField jTextField_Thing2; public JTextField jTextField_Thing1; public JTextField jTextField_Both2; public JTextField jTextField_Both1; private JPanel panel_Thing1; private JPanel panel_Thing2; private JTabbedPane jTabbedPaneChipType; public LowLevelMinimal() { super(); initComponents(); } private void initComponents() { jLabel_Thing1 = new JLabel("Label 1"); jTextField_Thing1 = new JTextField("ONE"); jButton_Thing1 = new JButton("Thing1 Go"); jTextField_Thing2 = new JTextField("TWO"); jButton_Thing2 = new JButton("Thing2 Go"); jLabel_Both1 = new JLabel("Turn On"); jLabel_Both2 = new JLabel("Turn Off"); jTextField_Both1 = new JTextField(); jTextField_Both2 = new JTextField(); jButton_Both1 = new JButton("First Both"); jButton_Both2 = new JButton("Second Both"); jTextField_Both1.setText("1"); jTextField_Both2.setText("2"); panel_Thing1 = new JPanel(); panel_Thing2 = new JPanel(); jTabbedPaneChipType = new JTabbedPane(); jTabbedPaneChipType.addTab("Thing1", panel_Thing1); jTabbedPaneChipType.addTab("Thing2", panel_Thing2); GroupLayout layoutThing1 = new GroupLayout(panel_Thing1); panel_Thing1.setLayout(layoutThing1); layoutThing1.setHorizontalGroup(layoutThing1.createParallelGroup(GroupLayout.Alignment.LEADING) .addGroup(layoutThing1.createSequentialGroup() .addContainerGap() .addGroup(layoutThing1.createParallelGroup(GroupLayout.Alignment.LEADING) .addGroup(layoutThing1.createSequentialGroup() .addGroup(layoutThing1.createParallelGroup(GroupLayout.Alignment.TRAILING, false) .addComponent(jLabel_Thing1, GroupLayout.Alignment.LEADING)) .addGroup(layoutThing1.createParallelGroup(GroupLayout.Alignment.LEADING) .addGroup(layoutThing1.createSequentialGroup() .addGap(12, 12, 12) .addGroup(layoutThing1.createParallelGroup(GroupLayout.Alignment.LEADING) .addComponent(jTextField_Thing1, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)) .addGap(7, 7, 7) .addGroup(layoutThing1.createParallelGroup(GroupLayout.Alignment.LEADING) .addComponent(jButton_Thing1, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))) .addGroup(layoutThing1.createSequentialGroup() .addComponent(jLabel_Both1, GroupLayout.PREFERRED_SIZE, 66, GroupLayout.PREFERRED_SIZE) .addGap(18, 18, 18) .addComponent(jTextField_Both1, GroupLayout.PREFERRED_SIZE, 68, GroupLayout.PREFERRED_SIZE) .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED) .addComponent(jButton_Both1, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) .addGroup(layoutThing1.createSequentialGroup() .addComponent(jLabel_Both2, GroupLayout.PREFERRED_SIZE, 66, GroupLayout.PREFERRED_SIZE) .addGap(18, 18, 18) .addComponent(jTextField_Both2, GroupLayout.PREFERRED_SIZE, 68, GroupLayout.PREFERRED_SIZE) .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED) .addComponent(jButton_Both2, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ).addContainerGap() )))); layoutThing1.setVerticalGroup(layoutThing1.createParallelGroup(GroupLayout.Alignment.LEADING) .addGroup(layoutThing1.createSequentialGroup() .addContainerGap() .addGroup(layoutThing1.createParallelGroup(GroupLayout.Alignment.LEADING) .addComponent(jLabel_Both1, GroupLayout.Alignment.TRAILING) .addComponent(jTextField_Both1, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE) .addComponent(jButton_Both1)) .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED) .addGroup(layoutThing1.createParallelGroup(GroupLayout.Alignment.BASELINE) .addComponent(jLabel_Both2) .addComponent(jTextField_Both2, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE) .addComponent(jButton_Both2)) .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED) .addGroup(layoutThing1.createParallelGroup(GroupLayout.Alignment.BASELINE) .addComponent(jLabel_Thing1) .addComponent(jTextField_Thing1, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE) .addComponent(jButton_Thing1)) .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED) .addContainerGap() )); GroupLayout layoutThing2 = new GroupLayout(panel_Thing2); panel_Thing2.setLayout(layoutThing2); layoutThing2.setHorizontalGroup(layoutThing2.createParallelGroup(GroupLayout.Alignment.LEADING) .addGroup( layoutThing2.createSequentialGroup() .addContainerGap() .addGroup( layoutThing2.createParallelGroup(GroupLayout.Alignment.LEADING) .addGroup( layoutThing2.createParallelGroup(GroupLayout.Alignment.TRAILING, false) .addGroup( layoutThing2.createParallelGroup(GroupLayout.Alignment.LEADING) .addGroup( layoutThing2.createSequentialGroup() .addGap(12, 12, 12) .addGroup(layoutThing2.createParallelGroup(GroupLayout.Alignment.LEADING) .addComponent(jTextField_Thing2, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)) .addGap(7, 7, 7) .addGroup(layoutThing2.createParallelGroup(GroupLayout.Alignment.LEADING) .addComponent(jButton_Thing2, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ) .addGroup( layoutThing2.createSequentialGroup() .addComponent(jLabel_Both1, GroupLayout.PREFERRED_SIZE, 66, GroupLayout.PREFERRED_SIZE) .addGap(18, 18, 18) .addComponent(jTextField_Both1, GroupLayout.PREFERRED_SIZE, 68, GroupLayout.PREFERRED_SIZE) .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED) .addComponent(jButton_Both1, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) ) .addGroup(layoutThing2.createSequentialGroup() .addComponent(jLabel_Both2, GroupLayout.PREFERRED_SIZE, 66, GroupLayout.PREFERRED_SIZE) .addGap(18, 18, 18) .addComponent(jTextField_Both2, GroupLayout.PREFERRED_SIZE, 68, GroupLayout.PREFERRED_SIZE) .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED) .addComponent(jButton_Both2, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) ))) ).addContainerGap() )); layoutThing2.setVerticalGroup(layoutThing2.createParallelGroup(GroupLayout.Alignment.LEADING) .addGroup(layoutThing2.createSequentialGroup() .addContainerGap() .addGroup(layoutThing2.createParallelGroup(GroupLayout.Alignment.LEADING) .addComponent(jLabel_Both1, GroupLayout.Alignment.TRAILING) .addComponent(jTextField_Both1, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE) .addComponent(jButton_Both1)) .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED) .addGroup(layoutThing2.createParallelGroup(GroupLayout.Alignment.BASELINE) .addComponent(jLabel_Both2) .addComponent(jTextField_Both2, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE) .addComponent(jButton_Both2)) .addGroup(layoutThing2.createParallelGroup(GroupLayout.Alignment.BASELINE) .addComponent(jTextField_Thing2, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE) .addComponent(jButton_Thing2)) .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED) .addContainerGap() )); this.add(jTabbedPaneChipType); } public static void main(String[] args) { JFrame frame = new JFrame("Test"); LowLevelMinimal llm = new LowLevelMinimal(); frame.getContentPane().add(llm); frame.pack(); frame.setVisible(true); } [/code] Подробнее здесь: [url]https://stackoverflow.com/questions/79080036/can-i-put-the-same-button-onto-2-different-tabs-in-a-jtabbedpane[/url]