- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
长话短说,我的JFrame
中有两个JPanel
对象,其中一个是调整面板,另一个是图形面板。当我调整窗口大小时,图形面板不会相应地调整大小。
我有两个类,其中一个是GUImodel
类,另一个是ModelSim
(模型模拟)类,其中GUImodel
类可视化 ModelSim
中的模拟部分。
绘制方法中的 i,j 索引覆盖图形 JPanel
中的 (770,460) 个像素。 fillRect
根据我在上面代码中的定义为 770x460 像素的每个像素着色。如何通过扩展窗口来调整图形 JPanel
的大小。从逻辑上讲,通过调整图形面板的大小,彩色像素将不再具有正方形形状,这对我来说很好。
请帮帮我,我该怎么做?如果您需要任何其他信息,请告诉我
<小时/>这是可运行的代码;第一个类是GUICA,另一个类是ModelSim。
吉卡:
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ComponentEvent;
import java.awt.event.ComponentListener;
import javax.swing.*;
/**
* Cellular Automata Graphical User Interface
* @author Mahdi
* @version 1.0
*/
// This code provide a simple GUI for Cellular Automata
// Notice that we are going to extend our super class JFrame which is the main window of our simulation
// Inside this JFrame, we are going to add two subframes, which are called JPanels.
public class GUICA extends JFrame {
// We need to make to Jpanels inside the main Jframe
// First Jpanel is adjustPanel
private JPanel adjustPanel;
// Second Jpanel is graphicPanel
private JPanel graphicPanel;
// Now it is the time to create buttons
private JButton startButton;
private JButton resetButton;
private JButton stopButton;
// We need to make an object from our model to implement that one in GUI part
private ModelSim model;
// We need also timer to re-implement (update) our simulation
private Timer timer;
// Detrmining the initial values of Windows panel main size
static int widthPixel = 766;
static int heightPixel = 468;
Rectangle bounds;
// Now, that's the time to create our constructor
public GUICA(){
// Here super is our JFrame and the string defines the name of our Frame.
super("Cellular Automata Evacuation");
// The below code will close the window(JFrame), once we have click on window exit
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//lets define the default size of our window page(main JFrame), where the first value is the x and second one is y;
setSize(widthPixel,heightPixel);
// First let's define the role of our timer in our future simulation. We first have to initialize our object in
// the constructor, then with an actionlistener, we will define the role of timerlistener with a nested class.
timer = new Timer(1,new TimerListener());
// We need to initialize our buttons right now.
// The important factor here is the actionlistener, we need to addactionlistener to each button to define their duties.
// Their duties can be defined by a nested class (which is defined inside our main class)
startButton = new JButton("Start");
startButton.addActionListener(new StartListener());
resetButton = new JButton("Reset");
resetButton.addActionListener(new ResetListener());
stopButton = new JButton("Stop");
stopButton.addActionListener(new StopListener());
// There are many options to put the buttons in different part of the JPanel, I am going to use not the easiest one
// but the handiest one. We want to accommodate our buttons inside adjustPanel
adjustPanel = new JPanel(new GridBagLayout());
// The below code is for determining the position of our buttons
GridBagConstraints grid = new GridBagConstraints();
grid.insets = new Insets(10,10,10,10);
// For start button
grid.gridx = 0;
grid.gridy = 1;
adjustPanel.add(startButton, grid);
// For stop button
grid.gridx = 0;
grid.gridy = 2;
adjustPanel.add(resetButton,grid);
//Let's Separate the buttons from each other with the below tricky method
grid.insets = new Insets(20,20,20,20);
JLabel white = new JLabel();
grid.gridx = 0;
grid.gridy = 3;
adjustPanel.add(white,grid);
// For stop button
grid.gridx = 0;
grid.gridy = 4;
adjustPanel.add(stopButton,grid);
// We can determine that how much of the space is going to be belonged to adjustPanel
adjustPanel.setPreferredSize(new Dimension(100,heightPixel));
// We need to add this panel to our main JFrame panel; also we can determine where we want to place this panel
// I won't use grid method to place this panel. However,instead, I use the simplest way to determine the position of panels
setLayout(new BorderLayout());
add(adjustPanel,BorderLayout.WEST);
// What about the other panel (graphicPanel) we need to initialize again, but we do not need to determine the exact position
// of this panle, because it will cover the whole remainder JFrame as its own property
graphicPanel = new JPanel();
graphicPanel = new GraphicPanel();
graphicPanel.setPreferredSize(new Dimension(widthPixel-100,heightPixel));
//graphicPanel.setBackground(Color.white);
add(graphicPanel,BorderLayout.CENTER);
bounds = new Rectangle(widthPixel-100,heightPixel);
model = new ModelSim(bounds);
}
// Start button action listener
private class StartListener implements ActionListener{
public void actionPerformed(ActionEvent e) {
timer.start();
}
}
// Reset button action listener
private class ResetListener implements ActionListener{
public void actionPerformed(ActionEvent e) {
model = new ModelSim(bounds);
}
}
// Stop button action listener
private class StopListener implements ActionListener{
public void actionPerformed(ActionEvent e) {
timer.stop();
}
}
// Stop button action listener
private class TimerListener implements ActionListener{
public void actionPerformed(ActionEvent e) {
model.update();
}
}
private class GraphicPanel extends JPanel{
public GraphicPanel(){
setPreferredSize(new Dimension(widthPixel-100,heightPixel));
//super.revalidate();
//super.repaint();
//System.out.println(widthPixel);
}
public void paintComponent(Graphics g){
super.paintComponent(g);
g.setColor(Color.WHITE);
g.fillRect(0, 0, widthPixel-100,heightPixel);
model.draw(g);
}
}
// To make the code runnable, we need provide static main class
public static void main(String[] args){
JFrame gui = new GUICA();
gui.pack();
gui.setVisible(true);
}
}
<小时/>
ModelSim 代码:
import java.awt.*;
import java.util.ArrayList;
public class ModelSim {
private Rectangle bounds;
private Color color;
public ModelSim(Rectangle bounds){
// Properties
this.bounds = bounds;
}
public void update(){
}
// Defining the static values together with walls and prohibited places.
public void draw(Graphics g){
// Pixel Grow
int pgw = 1;
int pgh = 1;
for(int j = 0; j < bounds.getHeight(); j++){
for(int i = 0; i < bounds.getWidth(); i++){
if (i<100){
g.setColor(color.RED);
g.fillRect(i,j,pgw,pgh);
}else if(i>100){
g.setColor(color.GREEN);
g.fillRect(i,j,pgw,pgh);
}`enter code here`
}
}
}
}
最佳答案
编辑:
我想你的面板正在调整大小,但你看不到它,因为你有硬编码的背景颜色。为了避免这种情况,我建议您使用类似的东西
g.fillRect(0, 0, this.getWidth(), this.getHeight());
此外,将 Graphics 对象 g 转换为 Graphics2D类(class)。然后就可以使用里面的scale方法了。 x 轴和 y 轴的缩放因子都是双倍且独立的。
在您的情况下,缩放因子应该是
double scaleX = this.getWidth() / 770.0;
double scaleY = this.getHeight() / 460.0;
// Now simply call scale
((Graphics2D) g).scale(scaleX, scaleY);
将其放在绘制任何内容之前。
希望这有帮助。
<小时/>您需要使用适当的布局管理器将面板放置在 JFrame 中。
如果您只有两个面板,我建议使用 BorderLayout。它使用起来非常简单,并且可能会满足您的目的。
这样,当您调整窗口大小时,面板的大小也会随之调整。
祝你好运。
关于java - 设置颜色后调整 JPanel 的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21501988/
我正在阅读 java swing,但在理解它时遇到问题。 Color 是一个类吗? Color[] col= {Color.RED,Color.BLUE}; 这在java中是什么意思? 最佳答案 Is
我正在研究用 python 编写的 pacman 程序。其中一个模块是处理吃 bean 游戏的图形表示。这当然是一些主机颜色。列表如下: GHOST_COLORS = [] ## establishe
本网站:http://pamplonaenglishteacher.com 源代码在这里:https://github.com/Yorkshireman/pamplona_english_teache
我最近将我的手机更新为 Android Marshmallow 并在其上运行了我现有的应用程序,但注意到颜色行为有所不同:将更改应用到 View (可绘制)的背景时,共享相同背景的所有 View (引
所有 X11/w3c 颜色代码在 Android XML 资源文件格式中是什么样的? I know this looks a tad ridiculous as a question, but giv
试图让 ffmpeg 创建音频波形,同时能够控制图像大小、颜色和幅度。我已经尝试过这个(以及许多变体),但它只是返回无与伦比的 "。 ffmpeg -i input -filter_complex "
我很好奇你是否有一些关于 R 中颜色酿造的技巧,对于许多独特的颜色,以某种方式使图表仍然好看。 我需要大量独特的颜色(至少 24 种,可能需要更多,~50 种)用于堆叠区域图(所以不是热图,渐变色不起
我看到的许多 WPF 示例和示例似乎都有硬编码的颜色。这些指南 - http://msdn.microsoft.com/en-us/library/aa350483.aspx建议不要硬编码颜色。在构建
我想更改文件夹的默认蓝色 如何设置? 最佳答案 :hi Directory guifg=#FF0000 ctermfg=red 关于Vim NERDTree 颜色,我们在Stack Overflow上
是否有关于如何将任意字符串哈希为 RGB 颜色值的最佳实践?或者更一般地说:3 个字节。 你问:我什么时候需要这个?这对我来说并不重要,但想象一下任何 GitHub 上的那些管图 network pa
我正在尝试将默认颜色设置为自定义窗口小部件。 这是有问题的代码。 class ReusableCard extends StatelessWidget { ReusableCard({this.
import javax.swing.*; import javax.swing.table.DefaultTableCellRenderer; import javax.swing.table.Ta
我有一个 less 文件来定义一堆颜色/颜色。每个类名都包含相关颜色的名称,例如 .colourOrange{..} 或 .colourBorderOrange{..} 或 navLeftButtOr
我有一个RelativeLayout,我需要一个黑色背景和一个位于其中间的小图像。我使用了这段代码: 其中@drawable/bottom_box_back是: 这样我就可以将图像居中了。但背
我需要设置 浅色 的 JPanel 背景,只是为了不覆盖文本(粗体黑色)。 此刻我有这个: import java.util.Random; .... private Random random =
我正在尝试制作一个自定义文本编辑器,可以更改特定键入单词的字体和颜色。如何更改使用光标突出显示的文本的字体和/或颜色? 我还没有尝试过突出显示部分。我尝试获取整个 hEdit(HWND) 区域并更改字
我想改变我整个应用程序的颜色。 在我的 AndroidManfiest.xml 中,我有正确的代码: 在 values 文件夹中,我有 app_theme.xml: @style/MyAc
是否可以使用 android 数据绑定(bind)从 xml 中引用颜色? 这很好用: android:textColor="@{inputValue == null ? 0xFFFBC02D : 0
有没有办法在 Android 应用程序中设置“空心”颜色? 我的意思是我想要一个带有某种背景的框,而文本实际上会导致背景透明。换句话说,如果整个 View 在蓝色背景上,文本将是蓝色的,如果它是红色的
我用CGContextStrokePath画在白色背景图片中的一条直线上,描边颜色为红色,alpha为1.0画线后,为什么点不是(255, 0, 0),而是(255, 96, 96)为什么不是纯红色?
我是一名优秀的程序员,十分优秀!