Java JButton位于它不在的JPanel上';t应该是
嗨,这是我的具体问题。我试图用for循环将一个按钮添加到一个面板中 这是用于创建jbutton的for循环Java JButton位于它不在的JPanel上';t应该是,java,arrays,swing,jpanel,jbutton,Java,Arrays,Swing,Jpanel,Jbutton,嗨,这是我的具体问题。我试图用for循环将一个按钮添加到一个面板中 这是用于创建jbutton的for循环 nizButtona=new JButton[22]; for(int i=0;i<nizButtona.length;i++){ nizButtona[i] = new JButton(); if(i==0){ nizButtona[i].setText("Započni kviz"); //Start quiz nizButtona[i].add
nizButtona=new JButton[22];
for(int i=0;i<nizButtona.length;i++){
nizButtona[i] = new JButton();
if(i==0){
nizButtona[i].setText("Započni kviz"); //Start quiz
nizButtona[i].addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e){
cl.next(nizPanela[1]);
}
});
}else if(i==1){
nizButtona[i].setText("Izlaz"); //Quit
nizButtona[i].addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e){
System.exit(0);
}
});
}else if(i<12){
nizButtona[i].setText("Sledeće pitanje"); //Next question, on next panel
nizButtona[i].addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e){
cl.next(nizPanela[1]);
}
});
}
nizButtona=newjbutton[22];
对于(int i=0;i而不是setLayout(null)
,请学会充分利用您的优势。下面的示例使用一系列函数将一个网格添加到另一个网格中
不要使用setLayout(null)
,而是要学会充分利用自己的优势。下面的示例使用一系列函数将一个网格添加到另一个网格中
不要只是粘贴你的代码。你采取了什么步骤来调试它?你能准确地确定你的代码的哪部分不工作,然后只发布相关的代码片段吗?我没有语法错误,所以问题是合乎逻辑的,所以我认为最好是发布我代码中的所有行。问题是:我看不到框架上的JButton。不过,最好的做法是只发布你认为相关的代码。即使你不知道哪些代码是重要的,你也应该将代码分成不同的块,并在代码块之间解释每个代码块的用途。顺便说一句@LukeTaylor OP提供的代码是什么。代码行数不到100行(出于所有目的)它是完整的(可以编译而不需要任何更改或额外的库),是可验证的,并且是问题的一个示例(我们可以运行代码来查看问题)@AndrewThompson谢谢。我真的只是反对在发布代码时不评论每个部分的作用。我明白你的观点,即不只是粘贴代码。你采取了什么步骤来调试它?你能准确地识别代码的哪一部分不起作用,然后只发布相关的代码片段吗?我没有语法分析器ror所以问题是合乎逻辑的,所以我认为最好是发布我代码中的所有行。问题是:我看不到框架上的JButton。不过,最好的做法是只发布您认为可能相关的任何代码。即使您不知道哪些代码是重要的,您也应该将代码分成不同的块,并在代码块之间解释什么是重要的t每个都是for.BTW@LukeTaylor,OP提供的是一个。在少于100行的代码中,它是最小的(出于所有意图和目的)。它是完整的(可以编译而不需要任何更改或额外的库),是可验证的,并且是问题的一个示例(我们可以运行代码来查看问题)@AndrewThompson谢谢。我真的只是反对在发布代码时不评论每个部分的作用。我也明白你的观点。哦,你不明白我的意思:)我只想显示一个面板和末端(南面板),所以请显示一个标签-用于提问,4个单选按钮用于回答,2个按钮用于下一步和下一步。所以,当有人点击“下一步”时,它将显示另一个面板,其中有另一个问题标签、另一个答案以及“下一步”和“上一步”按钮。我想有10个面板,将显示一个接一个当一些点击文本。我希望你能理解我:)谢谢,也许会对我有帮助:)比如?是的,谢谢你:)看。哦,你不明白我:)我只想显示一个面板和末端(南面板),所以exp一个标签-用于提问,4个单选按钮用于回答,2个按钮用于下一步和返回。所以,当有人点击“下一步”时,它将显示另一个面板,其中有另一个问题标签、另一个答案以及“下一步”和“上一步”按钮。我想有10个面板,将显示一个接一个当一些点击文本。我希望你能理解我:)谢谢,也许会对我有帮助:)喜欢吗?是的,喜欢那样,非常感谢:)
for(int i=3;i<=11;i++){
nizPanela[i].add(nizButtona[i-1]);
}
for (int i=0;i<nizPanela.length;i++ ){
nizPanela[i] = new JPanel();
if(i<=1){
okvir.getContentPane().add(nizPanela[i]);//Does i real need this getContentPane?
}else{
nizPanela[i].setLayout(new GridBagLayout());
nizPanela[1].add(nizPanela[i], String.valueOf(i));
}
}
cl=new CardLayout();
nizPanela[1].setLayout(cl);
cl.show(nizPanela[1],"2");
import java.awt.Color;
import java.awt.EventQueue;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
/**
* @see https://stackoverflow.com/a/36243395/230513
*/
public class Test {
private static final int ROW = 2;
private static final int COL = 5;
private void display() {
JFrame f = new JFrame("Test");
f.setLayout(new GridLayout(0, 1));
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel top = new JPanel(new GridBagLayout());
top.setBackground(Color.darkGray);
JLabel label = new JLabel("Post no bills.");
label.setForeground(Color.yellow);
top.add(label);
f.add(top);
f.add(createGridPanel());
f.pack();
f.setLocationRelativeTo(null);
f.setVisible(true);
}
private JPanel createGridPanel() {
JPanel p = new JPanel(new GridLayout(ROW, COL, 5, 5));
p.setBorder(BorderFactory.createLineBorder(Color.yellow,5));
p.setBackground(Color.yellow);
for (int r = 0; r < ROW; r++) {
for (int c = 0; c < COL; c++) {
p.add(createSubPanel());
}
}
return p;
}
private JPanel createSubPanel() {
JPanel p = new JPanel(new GridLayout(0, 1));
JPanel top = new JPanel();
top.add(new JButton("One"));
top.add(new JButton("Two"));
JPanel bot = new JPanel();
bot.add(new JRadioButton("A"));
bot.add(new JRadioButton("B"));
bot.add(new JRadioButton("C"));
bot.add(new JRadioButton("D"));
p.add(top);
p.add(bot);
return p;
}
public static void main(String[] args) {
EventQueue.invokeLater(new Test()::display);
}
}
import java.awt.BorderLayout;
import java.awt.CardLayout;
import java.awt.Color;
import java.awt.EventQueue;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import javax.swing.AbstractAction;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
/**
* @see https://stackoverflow.com/a/36243395/230513
*/
public class CardPanel extends JPanel {
private static final JPanel cards = new JPanel(new CardLayout());
private final String name;
public CardPanel(String name) {
super(new GridLayout(0, 1));
this.name = name;
JPanel top = new JPanel(new GridBagLayout());
top.setBackground(Color.darkGray);
JLabel label = new JLabel(name);
label.setForeground(Color.yellow);
top.add(label);
JPanel bot = new JPanel();
bot.setBorder(BorderFactory.createLineBorder(Color.yellow, 5));
bot.add(new JRadioButton("A"));
bot.add(new JRadioButton("B"));
bot.add(new JRadioButton("C"));
bot.add(new JRadioButton("D"));
this.add(top);
this.add(bot);
}
@Override
public String toString() {
return name;
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
create();
}
});
}
private static void create() {
JFrame f = new JFrame();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
for (int i = 1; i < 9; i++) {
CardPanel p = new CardPanel("Panel " + String.valueOf(i));
cards.add(p, p.toString());
}
JPanel control = new JPanel();
control.add(new JButton(new AbstractAction("\u22b2Prev") {
@Override
public void actionPerformed(ActionEvent e) {
CardLayout cl = (CardLayout) cards.getLayout();
cl.previous(cards);
}
}));
control.add(new JButton(new AbstractAction("Next\u22b3") {
@Override
public void actionPerformed(ActionEvent e) {
CardLayout cl = (CardLayout) cards.getLayout();
cl.next(cards);
}
}));
f.add(cards, BorderLayout.CENTER);
f.add(control, BorderLayout.SOUTH);
f.pack();
f.setLocationRelativeTo(null);
f.setVisible(true);
}
}