- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想创建一个日历,根据它所基于的月份动态地创建自己。首先,我创建了一个将在任何月份使用的背景,其尺寸为 700x500(每天为 700/7,每月为 500/5,但 28 天-二月开始-周一有 5 行)周)。我用这句话做到了这一点:
public class Graph {
private final int sizeX = 700;
private final int sizeY = 500;
private Calendar calendar;
public Graph(Calendar calendar) {
this.calendar = calendar;
JFrame frame = new JFrame();
graph(frame);
}
public void graph(JFrame frame) {
buildBackground(frame);
}
private void buildBackground(JFrame frame) {
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
frame.setSize(sizeX, sizeY);
JPanel panel = new Background(sizeX, sizeY);
frame.add(panel);
frame.validate();
frame.repaint();
}
}
public class Background extends JPanel {
private int sizeX;
private int sizeY;
public Background(int sizeX, int sizeY) {
this.sizeX = sizeX;
this.sizeY = sizeY;
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(Color.DARK_GRAY);
g.fillRect(0, 0, sizeX, sizeY);
}
}
并且工作正常,深灰色背景已正确创建。当我尝试创建代表日期的小矩形时,问题就出现了;我设计了一个类,我想在某个坐标上表示这些矩形:
public class DayRectangle extends JPanel {
private int posX;
private int posY;
private int day;
public DayRectangle(int posX, int posY, int day) {
this.posX = posX;
this.posY = posY;
this.day = day;
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.fillRect(posX, posY, 60, 60);
}
public Dimension getPreferredSize() {
return new Dimension (60, 60);
}
@Override
public String toString() {
return String.format("(%d,%d):%d", posX, posY, day);
}
}
矩形的坐标已正确创建,因为这是 DayRectangle
的 ArrayList
的内容:
[(20,20):1, (120,20):2, (220,20):3, (320,20):4, (420,20):5, (520,20):6, (620,20):7, (20,120):8, (120,120):9, (220,120):10, (320,120):11, (420,120):12, (520,120):13, (620,120):14, (20,220):15, (120,220):16, (220,220):17, (320,220):18, (420,220):19, (520,220):20, (620,220):21, (20,320):22, (120,320):23, (220,320):24, (320,320):25, (420,320):26, (520,320):27, (620,320):28, (20,420):29, (120,420):30, (220,420):31]
它们从 (20, 20)
开始,因为我想在这些矩形之间留一些间隙。
主要问题是当我执行此代码时没有打印矩形:
public void graph(JFrame frame) {
buildBackground(frame);
frame.getGraphics().setColor(Color.WHITE);
JPanel panel;
for (DayRectangle d : arraylist) {
panel = d;
frame.add(panel);
frame.repaint();
}
}
我做错了什么?为什么没有打印任何内容?谢谢。
最佳答案
您似乎忘记了 JFrame 使用 BorderLayout 作为其布局管理器。相反,您应该将 Day JPanel 添加到另一个使用 GridLayout 的 JPanel 中,并且还要记住 Day JPanel 将相对于它们自己的本地坐标系进行绘制,因此每个 Day JPanel 可能应该在同一位置绘制其矩形,从 0 附近开始, 0,不相对于包含容器。
如果您希望一个 JPanel 成为背景 JPanel,则应将其添加到 JFrame 的 BorderLayout.CENTER 位置。给它一个 GridLayout,并向其中添加您的 Day JPanel 以及任何所需的 JLabels(如果您需要空方 block ,则为空)。另外,如果您希望显示背景图像或颜色,则 Day 可能需要不透明。
例如,
public class DayRectangle extends JPanel {
private static Color RECT_COLOR = Color.LIGHT_GRAY;
private static final int PREF_W = 60;
private static final int GAP = 4;
private int posX;
private int posY;
private int day;
public DayRectangle(int posX, int posY, int day) {
this.posX = posX; // not sure that you need this
this.posY = posY; // ditto
this.day = day;
// if you desire a background to show throw
// setOpaque(false);
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(RECT_COLOR);
g.fillRect(GAP, GAP, PREF_W - 2 * GAP, PREF_W - 2 * GAP);
}
public Dimension getPreferredSize() {
return new Dimension(PREF_W, PREF_W);
}
@Override
public String toString() {
return String.format("(%d,%d):%d", posX, posY, day);
}
}
举个简单的例子:
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import javax.swing.*;
@SuppressWarnings("serial")
public class ExampleGrid extends JPanel {
public ExampleGrid() {
JPanel mainGrid = new JPanel();
mainGrid.setLayout(new GridLayout(0, 7));
// just to show a little off-set of the days
mainGrid.add(new JLabel());
mainGrid.add(new JLabel());
mainGrid.add(new JLabel());
// now fill the calendar
for (int i = 0; i < 30; i++) {
mainGrid.add(new DayRectangle(i + 1));
}
JLabel monthLabel = new JLabel("JULY", SwingConstants.CENTER);
monthLabel.setFont(monthLabel.getFont().deriveFont(Font.BOLD, 36f));
// label the days of the week at the top
String[] daysOfWk = { "Sun", "Mon", "Tues", "Wed", "Thur", "Fri", "Sat" };
JPanel daysOfWkPanel = new JPanel(new GridLayout(1, 7));
for (String dayOfWk : daysOfWk) {
daysOfWkPanel.add(new JLabel(dayOfWk, SwingConstants.CENTER));
}
JPanel topPanel = new JPanel(new BorderLayout());
topPanel.add(monthLabel, BorderLayout.PAGE_START);
topPanel.add(daysOfWkPanel, BorderLayout.CENTER);
setLayout(new BorderLayout());
add(topPanel, BorderLayout.PAGE_START);
add(mainGrid, BorderLayout.CENTER);
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
// not sure what you want to do here
}
private static void createAndShowGui() {
ExampleGrid mainPanel = new ExampleGrid();
JFrame frame = new JFrame("Example Grid");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(mainPanel);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> createAndShowGui());
}
}
@SuppressWarnings("serial")
class DayRectangle extends JPanel {
private static Color RECT_COLOR = Color.LIGHT_GRAY;
private static final int PREF_W = 60;
private static final int GAP = 4;
private static final float FNT_SZ = 20f;
private int day;
public DayRectangle(int day) {
this.day = day;
setLayout(new GridBagLayout());
JLabel label = new JLabel("" + day);
label.setFont(label.getFont().deriveFont(Font.BOLD, FNT_SZ));
add(label);
// if you desire a background to show throw
// setOpaque(false);
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(RECT_COLOR);
g.fillRect(GAP, GAP, PREF_W - 2 * GAP, PREF_W - 2 * GAP);
}
public Dimension getPreferredSize() {
return new Dimension(PREF_W, PREF_W);
}
public int getDay() {
return day;
}
}
关于java - 多个 JPanel 未打印在背景前面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56819803/
我正在使用 CSS background: url(stuffhere.jpeg)对于我的背景,但是当你点击其他视频时,“元素”不是页面,背景不会改变。 我试过了 和 ,并尝试为#home 和#pr
这两个 CSS 属性有区别吗: background: none; background: transparent; 它们都有效吗? 应该使用哪一个,为什么? 最佳答案 它们之间没有区别。 如果您没有
csslint 警告回退背景(十六进制或 RGB)应该在 RGBA 背景之前。"evidence="background: rgba(0, 0, 0, 0.8);/* FF3+,Saf3+,Opera
我在我正在制作的新网站上使用 Flip 插件: http://www.concept-it.be/padre (点击联系人,然后点击电子邮件地址)。 正如你所看到的,当翻转开始后,div 的背景变成灰
有没有办法使用“前后”图像作为全尺寸背景?我想会很棒!我正在尝试将此类示例用作整页大小的图像; http://www.catchmyfame.com/2009/06/25/jquery-beforea
我认为答案是否定的,但是... 有没有办法说: background-size: contain 90% 所以它的作用正是 contain 会做的,但是然后将它调整得更小一些? 最佳答案 理想的解决方
将鼠标悬停在给定文本的每个字母上将更改文本的整个字体 + 正文背景颜色。我试过了,但我的尝试失败了。相反,字体只在被悬停的字母之后发生变化,我什至不知道如何从 div 选择器中影响正文背景颜色。 .h
我想给我的 UITableView 提供背景图片,所以我尝试了这个方法: - (void)viewDidLoad { [super viewDidLoad]; // Do any additional
我正在尝试使用 Python 3.6 使用 PIL/Numpy(每个屏幕截图~0.01s)快速截取准备处理的屏幕截图。理想情况下,窗口不需要位于前台,即即使另一个窗口覆盖它,屏幕截图仍然成功。 到目前
我正在尝试做一些可能不可能的事情,但让我们看看你怎么想。这是我的代码: html { background: url(../img/pattern.png) repeat, url(../im
一位设计师想出了这种类型的背景,如下图所示。我想避免使用图像背景。因此,如果可以使用 CSS background 属性复制它,我会努力思考。 最底层只是一个线性渐变,没有问题。但是在其之上分层的圆形
当 TreeView(或应用程序)失去焦点时,如何更改所选 TreeViewItem 的背景。在这种情况下,默认情况下选定的项目具有浅灰色背景。 编辑:第一个答案后的尝试:但是找不到带有 Target
一位设计师想出了这种类型的背景,如下图所示。我想避免使用图像背景。因此,如果可以使用 CSS background 属性复制它,我会努力思考。 最底层只是一个线性渐变,没有问题。但是在其之上分层的圆形
我需要有一个带有 CSS 的背景作为附加的图像我不能让它与线性渐变一起工作。 我正在尝试以下操作,但我无法仅创建 1 个白色条纹。 div { background: #5cbcb0; bac
我有一个ListView,它有一个页眉和页脚。它们在 CardView 中的布局。以及其中必须为背景的内容列表。这是一张可以清楚看到的图片:我现在是这样的: 以及如何做: 我这样做了,ScrollVi
我目前有一个 DIV,其背景图像设置如下: background: url(../images/site/common/body-bannar-bkground.png) repeat 0 0; 如何
我有一个 slider ,需要在不使用 .style.backgroundImage 的情况下更改背景。那么我该如何通过向 slider 或其他东西添加一些类来做到这一点呢? 'use strict'
好的,所以在 photoshop 中,我创建了一个具有透明背景和一些文本的 8 位彩色图像。然后我创建了一个具有透明背景和一些文本的 16 位颜色的图像。 当我右键单击两个图像并转到属性时,它显示两个
我有一个问题困扰着我,我似乎在 Google 上找不到答案。我用一段代码创建了一个小型测试应用程序,它执行如下操作: 在 MainActivity 中,我创建了一个 SomeClass 的实例,它有一
我想做这个, 在 Android Studio 的预览中看起来不错,但在运行时我得到这个 正如您在屏幕开头看到的那样,颜色是白色,我想添加我自己的颜色,在本例中为绿色。 最初它使用的是 Cordina
我是一名优秀的程序员,十分优秀!