我正在尝试Intellij Idea,并正在尝试做一些Swing开发。我遇到了一个我从未遇到过的问题Eclipse,我想知道我是否设置错误。
这是我的驱动程序运行的 GUI 类:
package view;
import javax.swing.*;
import java.awt.*;
public class View {
private JPanel panel;
public void run() {
JFrame frame = new JFrame("Vending Machine");
frame.setContentPane(new View().panel);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
}
{
// GUI initializer generated by IntelliJ IDEA GUI Designer
// >>> IMPORTANT!! <<<
// DO NOT EDIT OR ADD ANY CODE HERE!
$$$setupUI$$$();
}
/**
* Method generated by IntelliJ IDEA GUI Designer
* >>> IMPORTANT!! <<<
* DO …Run Code Online (Sandbox Code Playgroud) 我需要一些关于以下问题的帮助:
问题:
在设计视图中,在选定的Swing元素周围出现的帧不会显示在正确的位置.内容窗格也不位于窗口内的正确位置(JFrame).似乎无论是否使用布局(例如BorderLayout,GroupLayout).
例如,所选按钮的框架在按钮上方或旁边显示许多像素.在这种情况下,如果要通过使用courser单击选择GUI组件,则不应单击该元素的图形表示,而是单击上方或框架可能的某些像素 - 您必须考虑移位的偏移.通过几乎每次刷新设计视图(F5)或者如果您移动内容窗格中的某些组件,错误放置的帧的偏移量会针对某些像素发生变化 - 有时帧会在上方,有时在下方或旁边.
还有其他人有这个问题吗?
使用Ubuntu 12.04的WindowBuilder Pro是否有人没有这些问题?
什么可能导致此错误以及如何解决?
发生错误的系统环境:
提示:
如果内容窗格未正确放置在窗口内(JFrame),则似乎只会发生错误.有时内容窗格不合适几十个像素,有时它与JFrame本身一样宽,有时它比窗口大一点.
Windwos 7和Xubuntu 13.04在其他相同条件下不会出现错误(我没有测试过Xubuntu 12.04).但是Ubuntu 12.04和Kubuntu 12.04出现了错误.
我的解决方法是使用WindowBuilder Pro和VirtualBox中安装的Xubuntu 13.04.当然这不是一个永久的解决方案,因为我想继续使用Ubuntu 12.04 LTS.
我已阅读http://help.eclipse.org/indigo/index.jsp?topic=%2Forg.eclipse.wb.doc.user%2Fhtml%2Ffaq.html.
这里描述了同样的问题,但没有答案:https://stackoverflow.com/questions/15818379/windowbuilder-eclipse-away-from-the-actual-component?rq = 1
这里描述了一个可能的解决方法:https://bugs.eclipse.org/bugs/show_bug.cgi ? id = 417224
我正在做一个我的任务,它的一部分需要我在JFrame中的网格布局中放置一个红色块.之后,用户应该能够通过箭头键更改该红色块的位置.
到目前为止,我已经能够将红色块添加到网格布局中.问题是我无法移动它.
这是我的Main.java.它在下面的Panel.java中调用JFrame:
import java.awt.GridLayout;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
public class Main {
public static void main( String[] args ) {
Panel p = new Panel();
p.setSize(870, 780);
p.setVisible(true);
p.setResizable(true);
p.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}//END main
}//END Main
Run Code Online (Sandbox Code Playgroud)
Panel.java.这是具有KeyListener的代码来移动红色块.但它不起作用.
import java.awt.Color;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class Panel extends JFrame implements Runnable{
static final int GWIDTH = 200,
GHEIGHT = 200; …Run Code Online (Sandbox Code Playgroud) 如上所述:向内容窗格添加组件,
默认内容窗格是一个简单的中间容器,它继承自JComponent,并使用BorderLayout作为其布局管理器.
这是一个证据:
JFrame frame = new JFrame();
LayoutManager m = frame.getContentPane().getLayout();
System.out.println(m instanceof BorderLayout); // prints true
Run Code Online (Sandbox Code Playgroud)
但是,您能解释下面代码的输出吗?
JFrame frame = new JFrame();
LayoutManager m = frame.getContentPane().getLayout();
System.out.println(m);
System.out.println(m.getClass().getName());
LayoutManager m2 = new BorderLayout();
System.out.println(m2);
System.out.println(m2.getClass().getName());
Run Code Online (Sandbox Code Playgroud)
OUTPUT:
javax.swing.JRootPane$1[hgap=0,vgap=0]
javax.swing.JRootPane$1
java.awt.BorderLayout[hgap=0,vgap=0]
java.awt.BorderLayout
Run Code Online (Sandbox Code Playgroud) 我是编程新手,刚学习JFrame等,在这里我读了ContentPane就像这样"组件进入"内容窗格",而不是直接在框架中." 当我搜索COntentpane时,我读到了包含层次结构,这让我很难理解,
请问有人可以告诉我ContentPane的概念和Gui Component的包含层次结构
我想在我的新项目中使用 JavaFX 并希望像下面的屏幕截图一样。
在左侧网站上,我需要一个导航栏,在右侧我需要一个内容。所以,我会在左侧使用 VBox,在右侧使用 AnchorPane(或者更好的 ScrollPane)。
当我点击“安全”按钮时,它应该在右侧加载我的“安全”场景。但我怎么能做到这一点。没有为此找到任何解决方案。
非常感谢
所以我试图改变我在教程中制作的全屏游戏的背景,我正在尝试将背景更改为绿色,但它保持黑色,代码有什么问题?
Screen.java
package debels;
import java.awt.*;
import javax.swing.JFrame;
public class Screen {
private GraphicsDevice vc;
public Screen(){
GraphicsEnvironment env = GraphicsEnvironment.getLocalGraphicsEnvironment();
vc = env.getDefaultScreenDevice();
}
public void setFullScreen(DisplayMode dm, JFrame window){
window.setUndecorated(true);
window.setResizable(false);
vc.setFullScreenWindow(window);
if (dm != null && vc.isDisplayChangeSupported()){
try{
vc.setDisplayMode(dm);
}catch (Exception e){}
}
}
public Window getFullScreen(){
return vc.getFullScreenWindow();
}
public void restoreScreen(){
Window w = vc.getFullScreenWindow();
if (w != null){
w.dispose();
}
vc.setFullScreenWindow(null);
}
}
Run Code Online (Sandbox Code Playgroud)
Main.java
package debels;
import java.awt.*;
import javax.swing.*;
public class Main extends …Run Code Online (Sandbox Code Playgroud) 运行实例化此类的代码时:
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) 我想在另一个类中创建的JFrame内容窗格中显示存储在我的主类中的数组列表.我想我有如何创建JFrame和contentpane的基础知识但是我不清楚如何将数组传递到JFrame,所以当我运行程序时,窗口上会显示数组列表.任何见解将非常感谢我是Java的新手