我有一个包含一些字段的JPanel.JPanel的高度是有限的所以我必须在它周围放置一个JScrollPane,以便人们可以向下滚动.
正如您在下面看到的,它显示完美.但是你不能向下滚动(或向上).
DetailPanel detail = new DetailPanel();
JScrollPane jsp = new JScrollPane(detail);
jsp.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
jsp.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
jsp.setBounds(745, 10, 235, 225);
add(jsp);
Run Code Online (Sandbox Code Playgroud)
细节面板:
private void init(){
setLayout(null);
setSize(140, 400);
int x = 5, y = 0;
for(int i = 0; i < lbls.length; i++) {
JLabel lbl = new JLabel(lbls[i]);
lbl.setBounds(x, y, 200, 25);
add(lbl);
fields[i] = new JTextField();
fields[i].setBounds(x, y+26, 200, 25);
add(fields[i]);
y+=50;
}
}
Run Code Online (Sandbox Code Playgroud)

我写了一个小程序,在读一本关于swing的书时,在两个标签之间创建了一个JSplitPane.问题是JSplitPane几乎看不到(至少在我的操作系统中 - MAC OS Lion)并且在它上面设置一些属性(如前景色)似乎不起作用.
这是代码:
//Demonstrate a simple JSplitPane
package swingexample4_6;
import javax.swing.*;
import java.awt.*;
public class SplitPaneDemo {
//constructor
public SplitPaneDemo()
{
//Create a new JFrame container.
//Use the default border layout
JFrame jfrm = new JFrame("Split Pane Demo");
//Give the frame an initial size
jfrm.setSize(380, 150);
//Terminate the program when the user closes the application
jfrm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//--Make two labels to show the split pane
JLabel jlab = new JLabel(" Left side: ABCDEFGHIJKLMNOPQRSTUVWXYZ");
JLabel jlab2 = new JLabel(" …Run Code Online (Sandbox Code Playgroud) 有没有办法按单个因素缩放应用程序中的所有 Swing 组件?我有一个现有的 Swing 应用程序,我想以双倍大小显示所有组件。这可能吗?
编辑:
我正在将 Java Swing 应用程序移植到 Sugar(OLPC XO 图形环境)。我没有辅助功能。该机器在 7.5 英寸显示屏中只有一种 1200x900 的分辨率。所以组件真的很小而且不可读。
我在代码中生成一些JComponents并使用GridBag布局来排列它们.我的布局由12行和3列组成,每行包含一个JSlider,一个JCheckBox和一个JLabel.这是我用来生成UI的代码:
final int NUM_MOTORS = 12;
// This is the panel I'm adding the components to.
pnlMotorSliders.setLayout(new GridBagLayout());
GridBagConstraints c = new GridBagConstraints();
for (int i = 0; i < NUM_MOTORS; ++i) {
c.gridy = i;
// Create the slider
JSlider slider = new JSlider(SwingConstants.HORIZONTAL, 10, 4085, 10);
c.fill = GridBagConstraints.HORIZONTAL;
c.gridx = 0;
c.weightx = 0.9;
pnlMotorSliders.add(slider, c);
// Create the checkbox
JCheckBox checkBox = new JCheckBox();
checkBox.setOpaque(true);
checkBox.setBackground(Color.blue);
c.fill = GridBagConstraints.NONE;
c.gridx = 1;
c.weightx = 0.1;
pnlMotorSliders.add(checkBox, …Run Code Online (Sandbox Code Playgroud) 我只是学习Swing,并为自己构建了一个示例GUI作为练习.非常基本的,它在西侧,中间和东侧有三个面板JFrame.在最后一个面板中,有另一个面板和一个按钮.该小组是我的扩展JPanel,DrawPanel.Rectangle每次单击Repaint下面的按钮时,它会随机绘制.这是我的代码:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Tester
{
public static DrawPanel panelEastDrawPanelCenter;
public static void main()
{
Tester gui = new Tester();
gui.go();
}
public void go()
{
JFrame frame = new JFrame("This is the title");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// Create all the Western Panel components
JPanel panelWest = new JPanel();
// panelWest.setLayout(new BorderLayout());
JButton panelWestButtonWest = new JButton("Western-most West Button");
JButton panelWestButtonCenter = new JButton("Western-most Center …Run Code Online (Sandbox Code Playgroud) 我正在做一些练习来理解Java和Swing API.为什么在Disegno构造函数中有nullPointerException?我想打印两个矩形的坐标,但它们似乎没有初始化.
import java.awt.*;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Disegno extends JFrame{
Disegno(){
this.setSize(500, 500);
this.setDefaultCloseOperation(this.EXIT_ON_CLOSE);
MyPanel aba = new MyPanel();
this.setContentPane(aba);
this.setVisible(true);
System.out.println(aba.rect.blue.x + "-" + aba.rect.blue.y);
System.out.println(aba.rect.yellow.x + "-" + aba.rect.yellow.y);
}
public static void main(String[] args){
new Disegno();
}
}
class MyPanel extends JPanel{
JPanel up, down;
RectArea rect;
MyPanel(){
this.setLayout(new BorderLayout());
up = new JPanel();
this.add(up, BorderLayout.NORTH);
up.setBackground(Color.red);
up.setVisible(true);
down = new JPanel();
down.setBackground(Color.green);
this.add(down, BorderLayout.SOUTH);
down.setVisible(true);
rect = new RectArea();
this.add(rect, BorderLayout.CENTER);
this.setVisible(true);
} …Run Code Online (Sandbox Code Playgroud) 我的问题是我想绘制一个巨大的面板,但它不可能在一个小尺寸的框架中看到这个面板,所以我应该使用ScrollPane,我用它..
但是通过滚动冲突发生,所以我看不到任何面板.我只想修复它
请任何人看到我的代码并运行它并帮助解决问题
import java.awt.*;
import javax.swing.*;
public class Swing{
JFrame frame;
Panel panel;
public static void main(String [] args){
Swing a = new Swing();
a.go();
}
public void go(){
frame = new JFrame();
panel = new Panel();
panel.setPreferredSize(new Dimension(5000, 5000));
JScrollPane scroll = new JScrollPane(panel);
frame.add(scroll);
frame.pack();
frame.setVisible(true);
}
class Panel extends JPanel{
public void paintComponent(Graphics g){
Graphics2D a = (Graphics2D)g;
a.setColor(Color.RED);
a.drawLine(50, 50, 5000, 5000);
}
}
}
Run Code Online (Sandbox Code Playgroud)
提前致谢!
是设置的最佳尺寸JFrame采用setPreferredSize()认为是坏?
如果不好,有什么方法可以将JFrame窗口大小更改为我需要的尺寸.
我知道按照我需要的最终JFrame维度来铺设组件.但是,如果我使用快捷方式在调用setPreferredSize()之前使用调用更改首选大小pack()更改最终JFrame大小是不是很糟糕?如果是这样的话?
例如,我有样本表格:

显示时不设置首选大小.
现在我可以在调用setPreferredSize()之前通过调用调整表单大小pack().

通过调用显示: setPreferredSize(new Dimension(500, 300));
在铺设时,我可以设置组件尺寸具有类似的效果.但是只需调用就可以设置帧大小的缺点setPreferredSize().
我可以考虑将首选大小设置为在显示后用鼠标手动调整显示窗口的大小.不是吗?
码:
import java.awt.Dimension;
import javax.swing.GroupLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
public class MyFrame extends JFrame {
private static final long serialVersionUID = 1L;
private JTextField fullNameTextField = new JTextField();
private JTextField emailIDTextField = new JTextField();
private JTextArea addressTextArea = new JTextArea(); …Run Code Online (Sandbox Code Playgroud) 我正在尝试编写一个程序,在屏幕上显示一串行,其坐标将由另一个程序确定.
这样做,我试图从这里修改jasssuncao的代码,这样我就不必点击任何按钮来获取行:如何在Java中绘制行
这就是我现在拥有的:
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.LinkedList;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class LineDrawing extends JComponent{
private static class Line{
final int x1;
final int y1;
final int x2;
final int y2;
final Color color;
public Line(int x1, int y1, int x2, int y2, Color color) {
this.x1 = x1;
this.y1 = y1;
this.x2 = x2;
this.y2 = y2;
this.color = color;
}
}
private …Run Code Online (Sandbox Code Playgroud) 在下面的示例中,如何让JPanel占用所有JFrame?我将首选大小设置为800x420,但它实际上只填充792x391.
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics2D;
import java.awt.image.BufferStrategy;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class BSTest extends JFrame {
BufferStrategy bs;
DrawPanel panel = new DrawPanel();
public BSTest() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(new BorderLayout()); // edited line
setVisible(true);
setSize(800,420);
setLocationRelativeTo(null);
setIgnoreRepaint(true);
createBufferStrategy(2);
bs = getBufferStrategy();
panel.setIgnoreRepaint(true);
panel.setPreferredSize(new Dimension(800,420));
add(panel, BorderLayout.CENTER); // edited line
panel.drawStuff();
}
public class DrawPanel extends JPanel {
public void drawStuff() {
while(true) {
try {
Graphics2D g = (Graphics2D)bs.getDrawGraphics();
g.setColor(Color.BLACK);
System.out.println("W:"+getSize().width+", H:"+getSize().height);
g.fillRect(0,0,getSize().width,getSize().height);
bs.show();
g.dispose();
Thread.sleep(20);
} catch …Run Code Online (Sandbox Code Playgroud)