我研究过这个错误,似乎无法找到解决方案.我正在尝试创建一个包含40列和20行的800 JButtons网格.这将最终用于控制我正在制作的多米诺设置机器人将提示多米诺骨牌.我已经使用GridLayout成功创建了一个网格,但是由于项目的性质,我希望每一行都能被半个按钮偏移.我的意思是如何设置计算机键盘上的键.(我本来会添加一张有用的图片,说明我要解释的内容,但显然无法解释事物的初学者不允许添加图片,无论如何).
我尝试通过创建一个包含20个面板的JPanel数组来完成此操作.然后我在面板上添加了40个JButtons.然后我使用GridBagConstraints来抵消每隔一行.我读到你不应该混合awt和swing这样可能是问题,但我不知道.这是代码,我从youtube教程中找到了这个,因为我是一个非常初学者.如果我说的话没有意义,请原谅我.码:
import java.awt.GridLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
public class OffsetGrid {
public static void main (String [] args){
JFrame Frame = new JFrame();
Frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
GridLayout grid= new GridLayout();
GridBagConstraints gbca= new GridBagConstraints();
GridBagConstraints gbcb= new GridBagConstraints();
JPanel[] panel=new JPanel[20];
for (int row=0;row<20; row++){
panel[row]=new JPanel(new GridBagLayout());
gbca.gridx=1;
gbca.gridy=row;
gbcb.gridx=0;
gbcb.gridy=row;
for (int y=0; y<40;y++){
grid=new GridLayout(1,40);
panel[row].setLayout(grid);
JButton[] button = new JButton[40];
button[y]=new JButton();
button[y].setOpaque(true);
panel[row].add(button[y]);
}
if (row%2==0){
Frame.add(panel[row], gbcb);
} …Run Code Online (Sandbox Code Playgroud) 在 Java 中,当使用 BorderLayout 时,是否可以在 CENTER 中有两个面板,但两者都在表单上可见。
这是我的代码:
guiFrame.add(guiFieldsPanel, BorderLayout.CENTER);
guiFrame.add(guiButtonsPanel, BorderLayout.CENTER);
guiFrame.setVisible(true);
Run Code Online (Sandbox Code Playgroud)
在上面的代码中,两个面板都设置为中心,但我只能看到 guiButtonsPanel,因为它位于 guiFieldsPanel 的“顶部”。
我可以将两个面板组合在一起,然后将它们设置为显示在 CENTER 中吗?
我试图将它们放在南边,两个按钮并排放置,但我该怎么做呢?如果我就这样保留它们,但按钮会自动放置在顶部。
JPanel panel1 = new JPanel();
JPanel panel2 = new JPanel();
JButton button1 = new JButton("Button 1");
panel1.add(button1);
JButton test2 = new JButton("Button 2");
panel1.add(button2);
Run Code Online (Sandbox Code Playgroud)
另外,如何在内部有两个按钮的底部面板周围放置边框?
在Java中BorderLayout,NORTH部分通常是这样的:

所以我想要的是,NORTH和SOUTH部分具有相同的宽度CENTER.但是EAST,WEST部分应该具有高度CENTER.这意味着角落应该是空的.我不想使用GridLayout这个,因为我不希望它NORTH具有相同的高度CENTER.
我如何获得此布局?
运行实例化此类的代码时:
static final class MyFrame extends JFrame {
private CardLayout layout = new CardLayout();
public MyFrame() {
setLayout(layout);
System.out.println(getLayout());
}
}
Run Code Online (Sandbox Code Playgroud)
打印出来的结果是:
java.awt.BorderLayout[hgap=0,vgap=0]
Run Code Online (Sandbox Code Playgroud)
这是JFrame默认布局。布局没有改变。但是,如果我改变
setLayout(layout);
Run Code Online (Sandbox Code Playgroud)
到
getContentPane().setLayout(layout)
Run Code Online (Sandbox Code Playgroud)
getLayout() 将打印正确的布局。
MVCE:
不设置布局:
public class Main {
public static void main(String[] args) {
EventQueue.invokeLater(() -> {
MyFrame frame = new MyFrame();
frame.setVisible(true);
});
}
static final class MyFrame extends JFrame {
private CardLayout layout = new CardLayout();
public MyFrame() {
setLayout(layout);
System.out.println(getLayout());
}
}
}
Run Code Online (Sandbox Code Playgroud)
设置布局:
public class Main { …Run Code Online (Sandbox Code Playgroud)
我有一个带有流布局的顶部面板,其中包含一个文本字段和标签。我需要在第一行下方添加更多文本字段和标签。我意识到没有真正的方法可以在 flowlayout 中强制添加一条新线,所以我只是要制作一个新面板并将其放在顶部面板的下方。问题是现在有一个间隙,因为顶部面板的高度太高了。有没有办法调整面板的大小,使其宽度自动调整到屏幕,但我想调整新面板的高度,所以间隙更小。顶部的两个文本字段位于顶部面板中,带有 flowlayout,下面的 3 个文本字段位于一个带有 flowlayout 的新面板中,有没有办法让 3 个文本字段正好位于顶部的 2 个文本字段下方?此外,整个框架都在网格布局中。
frame.setLayout(new GridLayout(0,1));
Static JPanel topPanel = new JPanel(new flowlayout);
Static JPanel searchPanel = new JPanel(new flowlayout);
Static JPanel statusPanel = new JPanel(new gridLayout(2,1));
Static JPanel categoryPanel = new JPanel(new GridLayout(0.2));
Static JPanel btnPanel = new JPanel(new GridLayout(0,3));
frame.pack();
topPanel.add(searchPanel);
JPanel container2 = new JPanel(new BorderLayout()):
container2.add(topPanel, BorderLayout.North);
frame.getContentPane().add(container2);
frame.getContentPane().add(statusPanel);
frame.getContentPane().add(catergoryPanel);
frame.getContentPane().add(btnPanel);
Run Code Online (Sandbox Code Playgroud) 我有一个JPanel并设置如下:
JPanel panel = new JPanel();
panel.setLayout(new BoxLayout(panel, BoxLayout.PAGE_AXIS));
Run Code Online (Sandbox Code Playgroud)
然后我添加一个JTextField占用整个面板的:
JTextField field = new JTextField();
panel.add(field);
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试调整它的大小时:
panel.setPreferredSize(new Dimension(20,400));
Run Code Online (Sandbox Code Playgroud)
什么都没发生.为什么?我正在使用BoxLayout以便将我JLabel和JTextField组件按垂直顺序排列.如果无法调整面板的大小,我是否可以至少调整大小JTextField以使其不占用整个空间?
import java.awt.Dimension;
import javax.swing.BoxLayout;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class GUI extends JFrame
{
public GUI() {
JPanel panel = new JPanel();
panel.setLayout(new BoxLayout(panel, BoxLayout.PAGE_AXIS));
panel.setPreferredSize(new Dimension(20,400));
JTextField field1 = new JTextField();
JTextField field2 = new JTextField();
panel.add(field1);
panel.add(field2);
}
}
Run Code Online (Sandbox Code Playgroud) JPanel我正在尝试将桌子移到也在窗口内的桌子的左侧
我得到的是这样的:\n
我想要的是这样的:
\n
我尝试使用.setBounds方法但它不起作用。有人知道该怎么办吗?
这是我的代码:
\npackage Modulos;\nimport paneles.*;\nimport javax.swing.*;\n\npublic class ModuloAdmin extends JFrame {\n\n public ModuloAdmin(){\n //Crear tabla\n String[][] datosprueba = {\n {"001","Carlitos", "Casa","51202011"},\n {"001","Carlitos", "Casa","51202011"}\n };\n\n String[] TituloColumna = {"C\xc3\xb3digo", "Nombre", "Direcci\xc3\xb3n", "Tel\xc3\xa9fono"};\n JTable TablaSucursales = new JTable(datosprueba,TituloColumna);\n\n //Contenido de las pesta\xc3\xb1as\n JPanel PanelSucursales = new JPanel();\n\n PanelSucursales.add(TablaSucursales);\n PanelSucursales.add(new JScrollPane(TablaSucursales));\n JPanel PanelProductos = new JPanel();\n PanelProductos.add(new JLabel("Panel productos"));\n JPanel PanelClientes = new JPanel();\n PanelClientes.add(new JLabel("Panel Clientes"));\n JPanel PanelVendedores = new …Run Code Online (Sandbox Code Playgroud) 我试图在我的GUI上更改JLabel和JButton的位置.即使我尝试使用.setBounds来改变它们的位置; 它们都只出现在屏幕的顶部中央.
import java.awt.color.*;
import java.awt.font.*;
import java.awt.Graphics;
import java.awt.Image;
import javax.swing.*;
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
import javax.swing.UIManager.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
public class yo implements MouseListener {
Image image;
JButton button = new JButton("Wassup");
JFrame frame = new JFrame();
JLabel heloo = new JLabel("yo");
JPanel panel = new JPanel()
{
@Override
public void paintComponent(Graphics g)
{
super.paintComponent(g);
ImageIcon i = new ImageIcon("hi.jpg");
image = i.getImage();
g.drawImage(image,150,150,null);
g.drawString("Hello",100,100);
g.drawString("Hi",50,50);
}
};
public yo()
{
frame.add(panel);
frame.setTitle("Hello");
frame.setSize(500,500);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); …Run Code Online (Sandbox Code Playgroud) 我有很多JPanel,GroupLayout我用来addContainerGap()在边框上添加间隙。此外,我有一个具有其他布局 ( BorderLayout)的面板,我想为其容器添加与组布局面板相同的间隙(我将通过空边框添加它)。
所以我的问题是,如何获得容器间隙的大小?还是使用另一种方法更好?
我没有找到如何获得容器间隙的大小,所以我唯一能想到的就是在具有组布局的面板内添加面板并在那里添加容器间隙。
我有一个GUI,我已经尝试了很多方法,但我似乎无法正确构建它,我总是得到错误的布局,我的应用程序搞砸了.我只是想要一些帮助,如何在图像中构建一些接近GUI的东西,除了图像部分,这是不必要的.不需要完全像它,我只需要一些关于使用什么布局和如何使用的想法.谢谢
![1]](https://i.stack.imgur.com/VDvKg.png)
我的出发点是这样的:

标签下面的矩形是JScrollPane.
根据变量的值,我必须将JLabel和JCheckBox添加到滚动窗格.
我读了其他帖子,但我不能做我想要的.你能帮助我吗?
我没有代码,因为我认为我可以使用NetBeans设计器来完成它.我唯一能做的就是
JLabel label = new JLabel("New Label");
JCheckBox cb = new JCheckBox("New CheckBox");
jScrollPane1.add(label);
jScrollPane1.add(cb);
Run Code Online (Sandbox Code Playgroud)
但显然它不起作用.感谢Robby现在我可以添加组件.我需要知道如何对齐它们.例如,jLabel1下的一列标签,jLabel2下的一列复选框等都具有相同的高度和宽度.
我正在尝试向我的JPanel添加一个按钮并设置位置.我有
buttonOptions.setLocation(1150, 700);
但它将它添加到我的JPanel中间,大约600,20.我尝试添加
buttonOptions.setLocation(1150, 700);
将按钮添加到面板后,但也没有修复它.我还设置了动作以设置位置并且有效.
public class StartScreen extends JPanel implements ActionListener{
ImageIcon imageButtonOptions = new ImageIcon(imageButtonOptionsPath);
ImageIcon imageButtonOptionsHovered = new ImageIcon(imageButtonOptionsHoveredPath);
JButton buttonOptions = new JButton(imageButtonOptions);
public StartScreen() {
buttonOptions.setBorderPainted(false);
buttonOptions.setFocusPainted(false);
buttonOptions.setContentAreaFilled(false);
buttonOptions.addActionListener(this);
buttonOptions.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseEntered(java.awt.event.MouseEvent evt) {
buttonOptions.setIcon(imageButtonOptionsHovered);
}
public void mouseExited(java.awt.event.MouseEvent evt) {
buttonOptions.setIcon(imageButtonOptions);
}
});
buttonOptions.setLocation(1150, 700);
add(buttonOptions);
}
Run Code Online (Sandbox Code Playgroud) java ×13
layout-manager ×13
swing ×13
jpanel ×4
boxlayout ×1
contentpane ×1
flowlayout ×1
grouplayout ×1
jbutton ×1
jframe ×1
jlabel ×1
jscrollpane ×1