我目前正在尝试开发一个基本的像素编辑器应用程序,以建立我的Java编程经验.我正在设计它,所以用户有几个颜色选项,他们点击一个选项,然后他们可以拖动网格中的单元格,他们改变颜色(像一个典型的图像编辑器,但有一种卡扣到每个网格细胞)
知道Java组件(如果有的话)能够在Java中实现这种类型的网格吗?
我曾经想过每个单元都是一个JButton,但这看起来效率非常低,而且我不认为可以通过单独点击每个单元来改变每个单元格(按钮)的颜色.
任何帮助赞赏.
我有一个示例代码:
import java.awt.*;
import javax.swing.*;
import javax.swing.border.BevelBorder;
public class AWT extends JFrame {
public static void main(String[] args) {
final JFrame frame = new JFrame();
frame.setPreferredSize(new Dimension(600, 450));
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setBackground(Color.green.darker());
Button btn_1 = new Button("Button 1");
btn_1.setBackground(Color.green.darker());
btn_1.setSize(40, 100);
Button btn_2 = new Button("Button 2");
btn_2.setBackground(Color.green.darker());
btn_2.setSize(40, 100);
Button btn_3 = new Button("Button 3");
btn_3.setBackground(Color.green.darker());
btn_3.setSize(40, 100);
JPanel players = new JPanel(new GridLayout(1, 3));
players.add(btn_1);
players.add(btn_2);
players.add(btn_3);
players.setBackground(Color.green.darker());
players.setPreferredSize(new Dimension(450, 80));
JPanel game = new JPanel();
game.setBorder(BorderFactory.createBevelBorder(BevelBorder.LOWERED));
game.setBackground(Color.green);
game.setPreferredSize(new Dimension(600, …Run Code Online (Sandbox Code Playgroud) 请注意我还没有在Mac机器上的Windows机器上测试过这个.我不太确定这是否也出现在Windows机器上......
当我调整Java应用程序的大小时,内容是不可见的.我已经找到一种方法来解决它后调整其大小,但不能同时在用户调整窗口的大小.
我没有使用Swing或其他东西,因为它使我的二进制文件变得如此缓慢(在我看来).
结构是这样的:
Frame 我的主窗口Container内容视图main-windowContainer基于paint(Graphics g)-method 的子视图我已经添加了所有监听器My main-window,现在我可以在调整窗口大小后重绘Content-view .
public void componentResized(ComponentEvent e) {
this.contentView.paint(this.contentView.getGraphics());
}
Run Code Online (Sandbox Code Playgroud)
我谨慎使用paint(getGraphics())-method并不是一个非常好的方法,但是因为repaint()-method根本没有做任何事情,所以它是唯一可行的方法.
调整大小时,所有绘制的内容都变得不可见.但是,当我向我添加Button-instance Content-view并调整我Main-window的大小时,该按钮不会被隐藏.
我是能够追踪"live'调整大小事件:
public void componentMoved(ComponentEvent e) {
System.out.println("Live-resize");
}
Run Code Online (Sandbox Code Playgroud)
当我将repaint-method(或官方重绘方法)添加到像这样的'live'-resize事件时,我仍然得到输出,但是,它没有重新绘制或者某些东西
public void componentMoved(ComponentEvent e) {
System.out.println("Live-resize");
this.contentView.paint(this.contentView.getGraphics());
}
Run Code Online (Sandbox Code Playgroud)
要么
public void componentMoved(ComponentEvent e) {
System.out.println("Live-resize");
this.contentView.repaint();
} …Run Code Online (Sandbox Code Playgroud) 我有三个问题/问题。(注意 - 我没有足够的声誉来发布图片,所以我链接了它们。我需要混淆它们......)
1) 我创建了一个面板来保存我的游戏图形(玩家区域)。该面板应该是 800x800 并剪辑位于下方和右侧的所有内容。但是当我将图形面板添加到 JFrame 时,它不会剪辑。所以图像在右侧和左侧移动。这是游戏开始的图片。理想情况下,图形将始终从这个矩形开始:
图片#1:http : //i.stack.imgur.com/idL8f.png
现在,当我按下播放开始时会发生什么。
图片#2:http : //i.stack.imgur.com/dxtbe.png
如何设置面板/框架,以便图形仅占用 800x800(如第一张图片)而其他所有内容都被剪裁?
2) 我对如何设置 JFrame 有点困惑。这是我希望它的布局方式:
图片#3:http : //i.stack.imgur.com/ZyJS5.png
你会如何布置 JFrame/Panels?我在考虑 BorderLayout,但我不确定它是否会奏效。
3) 对于这个游戏,我扩展 JFrame 的类也包含 main()。这是不好的做法吗?** 你不应该在主类上扩展 JFrame 吗?
我会改写我的问题:**
如果有足够的空间通过变形来显示所有项目,如何防止在FlowLayout中启用Java ScrollBar.
**
这是我想要实现的截图:
请注意,在不需要时禁用滚动条.

当您调整窗口大小时,如果某些项目在视图平面外,则应显示滚动条

PS我知道称为文档和Web的东西.
我知道当我创建一个JComponent的实例时,它有自己的首选大小.现在让我们假设我setPreferredSize手动JComponent的维度为0 x 0.我希望该组件"重置"自己的preferredSize.我怎么做?
我有一个面板布局问题,我似乎无法解决.我有以下代码:
public class Test extends ApplicationFrame {
public Test(String title) {
super(title);
JPanel jpanel = new JPanel();
jpanel.setPreferredSize(new Dimension(100 * 2, 300));
jpanel.setBackground(new Color(0xFF0000));
JScrollPane scrollPane = new JScrollPane(jpanel);
scrollPane.setBackground(new Color(0xFF0000));
scrollPane.getViewport().setPreferredSize(new Dimension(100 * 2, 300));
this.add(scrollPane, BorderLayout.WEST);
this.setPreferredSize(new Dimension(500, 500));
}
public static void main(String args[]) {
Test test = new Test("Layout Test");
test.pack();
RefineryUtilities.centerFrameOnScreen(test);
test.setVisible(true);
}
}
Run Code Online (Sandbox Code Playgroud)
创建以下布局:

当我拖动窗口的右侧并将其移动到红色JPanel和JScrollPane,我想水平滚动条出现在JScrollPane.但是目前窗口只是收缩而没有显示水平滚动条.这可能吗?
我想保留,BorderLayout.WEST因为我的用例就是当我没有足够大的图表来填充整个窗口时保持JFreeChart不会拉伸.
我已经阅读了大多数JTable/JComboBox对此类其他问题的回复,但还没有找到解决我问题的方法.
我创建了一个具有JComboBox TableHeader元素的表.没有任何JComboBox元素将打开以显示项目列表.如何获取要显示的各个JComboBox元素的项目列表?
请注意,此问题的一个显着特征是JComboBox位于TableHeader中,未嵌入JTable单元中.
任何帮助表示赞赏.
SSCE
import java.awt.Component;
import java.awt.Dimension;
import java.util.Enumeration;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.ListSelectionModel;
import javax.swing.SwingUtilities;
import javax.swing.table.TableCellRenderer;
import javax.swing.table.TableColumn;
public class ComboHeaderTest extends JScrollPane {
private static final Dimension DEFAULT_SIZE = new Dimension(200, 200);
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new ComboHeaderTest().initComponents();
}
});
}
private ComboHeaderTest() {
final String[][] data = { {"Header 1", "Header 2", "Header 3"},
{"A", "B", "C"},
{"D", …Run Code Online (Sandbox Code Playgroud) 作为Java初学者,我希望获得一些帮助,以了解为控制台应用程序构建摆动UI的最佳方法或技术。
现在,控制台应用程序运行良好,我想将其转换为swing应用程序。我想在JScrollPane中有一个JTextArea,用户可以对其进行编辑以输入其字符串,然后单击一个countwords按钮并以int格式获取输出。
下面是我的控制台应用程序以及我尝试使用swing应用程序的代码。我花了很多时间尝试对此进行研究,但是我似乎无法正确地做到这一点。
我的控制台应用程序:
import java.util.*;
public class WordCounter{
public static void main(String args[])
{
// Create Scanner object
Scanner s=new Scanner(System.in);
// Read a string
String st=s.nextLine();
//Split string with space
String words[]=st.trim().split(" ");
System.out.println("No. of words "+words.length);
}
}
Run Code Online (Sandbox Code Playgroud)
我对Swing的尝试:
import java.io.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.JTextArea;
import java.util.*;
class Countswords extends JPanel {
public Countswords() {
myTextArea();
}
private void myTextArea() {
this.setLayout(new BorderLayout());
this.setPreferredSize(new Dimension(400, 200));
JTextArea textArea = new JTextArea(5, 40);
JScrollPane …Run Code Online (Sandbox Code Playgroud) 我在java 5中的swing应用程序有一个像

迁移到java 8后,放大并仅显示其中的一部分

我看到了这个,并尝试将J2D_D3D设置为环境变量,并尝试将其作为vm参数传递.但没有解决问题.知道这可能是什么?